package com.smh.a03ArraysListDemo3;

import java.util.Arrays;
import java.util.Comparator;

public class ArraysDemo1 {
    public static void main(String[] args) {

        int[] arr={1,2,3,4,5,6,7,8};
        System.out.println(Arrays.toString(arr));

        // 必须有序且升序
        //如果不存在的话返回-的插入点-1(减一是为了避免-0的出现)
        System.out.println(Arrays.binarySearch(arr, 3));
        System.out.println(Arrays.binarySearch(arr,21));//-9=-8-1

        //拷贝数组
        //如果新数组长度大于老数组长度,默认初始化值
        int[] newarr = Arrays.copyOf(arr,10);
        System.out.println(Arrays.toString(newarr));

        //
        newarr = Arrays.copyOfRange(arr,1,3);//包头不包尾
        System.out.println(Arrays.toString(newarr));

        //填充
        Arrays.fill(newarr,100);
        System.out.println(Arrays.toString(newarr));

        //sort排序(底层是快排)
        int[] arr2 = {10,2,3,5,6,7,1,2,3,23};
        Arrays.sort(arr2);
        System.out.println(Arrays.toString(arr2));

        //利用插入排序和二分查找的方式进行排序的
        //默认把0索引的数据当成是有序的序列,索引后面认为是无序的序列
        //遍历无序的序列得到每一个元素,将元素A插入前面,
        //利用二分法确定插入点,
        //拿A与之比较,也就是compare比较,
        //<0,拿A与插入点之前的继续比较
        //>=0,拿A与插入点之后的继续比较
        //直到最后确定A的位置

        //compare方法的形式参数：
        // 参数一 o1： 表示在无序序列中，遍历得到的每一个元素1
        // 岁数二 02：有序序列中的元素

        // 返回值：
        // 负数：表示当前要插入的元素是小的，放在前面
        // 正数：表示当前要插入的元素是大的，放在后面
        // 0：表示当前要插入的元素跟现在的元素比是一样的们也会放在后面
        Integer[] arr3 = {1,21,12,12,32,212,121,12};

        Arrays.sort(arr3, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println("-------------");
                System.out.println(o1);
                System.out.println(o2);
                return o1-o2;
                //o1-o2是升序排列
                //o2-o1是降序排列
            }
        });
        System.out.println(Arrays.toString(arr3));

    }
}
